package PTA.javaA;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.LinkedList;
import java.util.Scanner;

interface IntegerStack{
    public Integer push(Integer item); //如item为null，则不入栈直接返回null。否则直接入栈，然后返回item。
    public Integer pop();              //出栈，如栈为空，则返回null。
    public Integer peek();             //获得栈顶元素，如栈顶为空，则返回null。注意：不要出栈
    public boolean empty();           //如过栈为空返回true
    public int size();                //返回栈中元素数量

}
class ArrayListIntegerStack implements IntegerStack{
    LinkedList ith=new LinkedList();//创建 LinkedList  对象
    @Override
    public Integer push(Integer item){
        if(item==null){
            return null;
        }ith.push(item);
        return item;

    }
    @Override
    public Integer pop(){
        if(ith.size()==0){
            return null;
        }
        return (Integer) ith.pop();
    }
    @Override
    public Integer peek(){
        if(ith.size()==0){
            return null;
        }
        return (Integer) ith.peek();
    }
    @Override
    public boolean empty(){
        return ith.isEmpty();
    }
    @Override
    public int size(){
        return ith.size();
    }

    @Override
    public String toString() {
        String s = "";
        s += "[";
        int i = ith.size();
        if (i != 0) {
            i--;
            for (; i > 0; i--) {
                s += ith.get(i) + ", ";
            }
            s += ith.get(i) + "]";
        } else {

            s += "]";
        }

        return s;
    }
}

public class ex22 {
    public static  void main(String[] args) {
        ArrayListIntegerStack a = new ArrayListIntegerStack();
        Scanner sc = new Scanner(System.in);
        int m = sc.nextInt();
        //输入m个值，均入栈。每次入栈均打印入栈返回结果。
        for(int i=0;i<m;i++){
            System.out.println(a.push(sc.nextInt()));
        }
        //输出： 栈顶元素，输出是否为空，然后输出size.
        System.out.println(a.peek()+","+a.empty()+","+a.size());
//输出栈中所有元素（调用其toString()方法）
        System.out.println(a.toString());

        //输入x，然后出栈x次，每次均打印出栈的对象。
        int x= sc.nextInt();
        for(int i=0;i<x;i++){
            System.out.println(a.pop());
        }
        System.out.println(a.peek()+","+a.empty()+","+a.size());
        System.out.println(a.toString());


    }

}
